home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / presto / presto10.lha / src / callstate.h < prev    next >
C/C++ Source or Header  |  1991-12-11  |  1KB  |  54 lines

  1. #ifndef __presto__callstate_h__
  2. #define __presto__callstate_h__
  3.  
  4. #define CS_MAXARGS    8
  5. class Callstate  {
  6.     PFany    cs_func;        // what we should call
  7. #ifdef mips
  8.     Objany  cs_arg;
  9. #else
  10.     int    cs_argc;        // number of longwords to call
  11.     Objany  cs_obj;                 // "this" arg (vax callg needs it here)
  12.     int    cs_argvs[CS_MAXARGS];    // longwords to push on the call
  13.     int    *cs_argvd;        // if we need more than
  14.                     // MAXARGS, shmalloc here.
  15.     int    cs_len;            // how much space available (in words)
  16. #endif /* mips */
  17. public:
  18.     Callstate()
  19.         {;}            // satisfy compiler
  20.     ~Callstate();
  21.     inline void init();
  22.     void reinit()            // do nothing
  23.         {;}
  24. #ifdef mips
  25.         void set(PFany f, Objany arg);
  26. #else        
  27.     void set(PFany f, int argc, int* argv);
  28. #endif /* mips */
  29.     void call(int *sp = 0, Objany o = 0);
  30.     void print(ostream& = cout);
  31. friend ostream& operator<<(ostream&, Callstate&);    
  32. };
  33.  
  34.  
  35.  
  36. //
  37. // We don't want to have a constructor here, cuz it will get automatically
  38. // called by Thread constructor, even when we are reusing old ones.
  39. // The whole set  "secret" mechanisms that initialize constructors are really
  40. // a pain.
  41. //
  42. inline void
  43. Callstate::init()
  44. {
  45. #ifdef mips
  46.         cs_arg = 0;
  47. #else 
  48.     cs_len = CS_MAXARGS;        // storage optimized for this
  49.     cs_argvd = 0;
  50. #endif
  51. }    
  52.     
  53. #endif /* __presto__callstate_h__ */
  54.